home *** CD-ROM | disk | FTP | other *** search
/ Amiga Format CD 51 / Amiga Format CD51 (2000-03-10)(Future Publishing)(GB)[!][issue 2000-04].iso / -in_the_mag- / pdselect / blizkick / bkgui.e < prev    next >
Text File  |  2000-02-16  |  15KB  |  617 lines

  1. -> FILE: ESrc:Own/BKGUI.e          REV: 521 --- BlizKick GUI
  2. /* History
  3. */
  4.  
  5. OPT OSVERSION=37, PREPROCESS
  6.  
  7. MODULE 'tools/EasyGUI', 'tools/exceptions', 'amigalib/lists', 'utility',
  8.        'gadtools', 'libraries/gadtools', 'exec/lists', 'exec/nodes',
  9.        'dos/dos', 'dos/exall', 'dos/dosextens'
  10. MODULE 'intuition/intuition','intuition/sghooks'
  11.  
  12. -> dirwalker flags
  13. ENUM DWF_RECURSIVE=1, DWF_NOSOFT=2, DWF_NOHARD=4
  14.  
  15. ENUM ERR_NONE, ERR_NEW, ERR_STR, ERR_LOCK, ERR_ADO, ERR_NODE, ERR_LIB, ERR_PATT,
  16.      ERR_OK, ERR_CANCEL, ERR_BREAK
  17.  
  18. RAISE ERR_NEW  IF New()=NIL,
  19.       ERR_STR  IF String()=NIL,
  20.       ERR_LOCK IF Lock()=NIL,
  21.       ERR_BREAK IF CtrlC()=TRUE,
  22.   ->    ERR_ADO  IF AllocDosObject()=NIL,
  23.       ERR_LIB  IF OpenLibrary()=NIL
  24.   ->    ERR_PATT IF ParsePatternNoCase()=-1
  25.  
  26. CONST BUF_SIZE=1024, FILENAME_SIZE=300
  27. CONST PATTERNBUFF_SIZE=FILENAME_SIZE*2+2
  28. ENUM DIR_NODE, POS_NODE, VOL_NODE, ASN_NODE, FILE_NODE, MAX_TYPE
  29. CONST DIRSTRLEN=6
  30.  
  31. DEF pathStr[FILENAME_SIZE]:STRING, currPath[FILENAME_SIZE]:STRING,
  32.     fileStr[FILENAME_SIZE]:STRING, patternStr[FILENAME_SIZE]:STRING,
  33.     patternBuff[PATTERNBUFF_SIZE]:ARRAY
  34.  
  35. DEF listGad1, listGad2, listGad3, txtGad1, txtGad2, secs, micros,
  36.     nameList1=NIL:PTR TO lh, nameList2=NIL:PTR TO lh, nameList3=NIL:PTR TO lh,
  37.     posList=NIL:PTR TO lh, txtGadc, txtGvt, txtGv
  38.  
  39. DEF f_force,f_localfast,f_quickboot,f_speedrom,f_hogwaitblit,
  40.     oldSel1=-1, oldSel2=-1, oldSel3=-1
  41.  
  42. DEF gh=NIL:PTR TO guihandle
  43.  
  44. DEF ksList=NIL:PTR TO lh,modList=NIL:PTR TO lh
  45.  
  46. OBJECT mynode
  47.   succ:PTR TO mynode
  48.   pred:PTR TO mynode
  49.   type:CHAR
  50.   pri:CHAR
  51.   name:PTR TO CHAR
  52.   userptr:LONG
  53. ENDOBJECT
  54.  
  55. OBJECT module
  56.   filename:PTR TO CHAR
  57.   enable:CHAR
  58. ENDOBJECT
  59.  
  60. OBJECT kickstart
  61.   filename:PTR TO CHAR
  62.   version:INT
  63.   revision:INT
  64.   size:LONG
  65. ENDOBJECT
  66.  
  67. OBJECT setdata
  68.   kickstart:PTR TO mynode  -> (kickstart)
  69.   modules:lh               -> list of mynode (module)
  70.   switches:LONG
  71. ENDOBJECT
  72.  
  73. /* saved set
  74. [SetName]
  75. kickstart=DEVS:rom40068
  76. module=MoveVBR
  77. module=Preparemul
  78. module=SoftSCSI
  79. switches=$1
  80.  
  81. */
  82.  
  83.  
  84.  
  85. PROC main() HANDLE
  86.   DEF here=NIL
  87.   utilitybase:=OpenLibrary('utility.library', 37)
  88.   gadtoolsbase:=OpenLibrary('gadtools.library', 37)
  89.  
  90.   NEW nameList1, nameList2, nameList3
  91.   newList(nameList1)
  92.   newList(nameList2)
  93.   newList(nameList3)
  94.  
  95.   addNode(nameList1, 'set1', 0, 0)
  96.   addNode(nameList1, 'set2', 0, 0)
  97.   addNode(nameList1, 'set3', 0, 0)
  98.  
  99.   /*
  100.   addNode(nameList2, '34.5   256k', 0, 0)
  101.   addNode(nameList2, '39.106 512k', 0, 0)
  102.   addNode(nameList2, '40.68  512k', 0, 0)
  103.  
  104.   addNode(nameList3, '· SoftSCSI', 0, 0)
  105.   addNode(nameList3, '· PrepareEmul', 0, 0)
  106.   addNode(nameList3, '  Hackdisk', 0, 0)
  107.   */
  108.  
  109.   getksList()
  110.   getmodList()
  111.  
  112.   gui()
  113.  
  114. EXCEPT DO
  115.   IF gadtoolsbase THEN CloseLibrary(gadtoolsbase)
  116.   IF utilitybase THEN CloseLibrary(utilitybase)
  117.   SELECT exception
  118.   CASE ERR_OK
  119.     PrintF('All ok\n')
  120.   CASE ERR_CANCEL
  121.     WriteF('Cancel\n')
  122.   DEFAULT
  123.     report_exception()
  124.   ENDSELECT
  125. ENDPROC
  126.  
  127. PROC getksList() HANDLE
  128.  
  129.   NEW ksList
  130.   newList(ksList)
  131.  
  132.   dirwalker('DEVS:',DWF_RECURSIVE,{getksl_hook})
  133.   
  134. EXCEPT DO
  135.   ReThrow()
  136. ENDPROC
  137. PROC getksl_hook(fib:PTR TO fileinfoblock,data)
  138.   IF fib.entrytype<0
  139.     IF fib.size AND ((fib.size AND $3FFFF)=0) AND (fib.size<=$80000)
  140.       IF isKickfile(fib.filename)
  141.         addNodeSort(nameList2, fib.filename, 0, 0)
  142.       ENDIF
  143.     ENDIF
  144.   ENDIF
  145. ENDPROC
  146. PROC isKickfile(name:PTR TO CHAR)
  147.   DEF buf[2]:ARRAY OF LONG,fh,got
  148.  
  149.   IF (fh:=Open(name,MODE_OLDFILE))
  150.     got:=(Fread(fh,buf,8,1)=1)
  151.     Close(fh)
  152.     IF got AND ((buf[] AND $FFF8FFFF)=$11104EF9) AND (Shr(buf[1]+FileLength(name),16)=$0100) THEN RETURN TRUE
  153.   ENDIF
  154. ENDPROC FALSE
  155.  
  156.  
  157. PROC getmodList() HANDLE
  158.  
  159.   NEW modList
  160.   newList(modList)
  161.  
  162.   dirwalker('DEVS:Modules/',0,{getmodl_hook})
  163. EXCEPT DO
  164.   ReThrow()
  165. ENDPROC
  166. PROC getmodl_hook(fib:PTR TO fileinfoblock,data)
  167.   DEF buf[64]:STRING
  168.   IF fib.entrytype<0
  169.     IF isModulefile(fib.filename)
  170.       StringF(buf,'  \s',fib.filename)
  171.       addNodeSort(nameList3, buf, 0, 0)
  172.     ENDIF
  173.   ENDIF
  174. ENDPROC
  175. PROC isModulefile(name:PTR TO CHAR)
  176.   DEF sl,buf[2]:ARRAY OF LONG
  177.  
  178.   IF (sl:=LoadSeg(name))
  179.     CopyMem(Shl(sl,2)+4,buf,8)
  180.     UnLoadSeg(sl)
  181.     IF buf[]=$707A4E75 THEN RETURN TRUE
  182.   ENDIF
  183. ENDPROC FALSE
  184.  
  185.  
  186. /*
  187.   DW00 - locking of directory failed
  188.   DW01 - AllocDosObject(FIB) failed
  189.   DW02 - Examine() failed
  190.   DW03 - ExNext() failed
  191. */
  192. PROC dirwalker(dirname,flags,hookfunc,userdata=NIL) HANDLE
  193.   DEF dirlock=NIL,fib=NIL:PTR TO fileinfoblock,state,olddir=-1
  194.  
  195.   IF (dirlock:=Lock(dirname, ACCESS_READ))=NIL THEN Raise("DW00")
  196.   IF (fib:=AllocDosObject(DOS_FIB,NIL))=NIL THEN Raise("DW01")
  197.  
  198.   IF Examine(dirlock,fib)=NIL THEN Raise("DW02")
  199.   olddir:=CurrentDir(dirlock)
  200.  
  201.   SetIoErr(0)
  202.   WHILE ExNext(dirlock,fib)
  203.     state:=hookfunc(fib,userdata)
  204.     EXIT state<0
  205.     IF flags AND DWF_RECURSIVE
  206.       IF (fib.entrytype=ST_SOFTLINK) AND (flags AND DWF_NOSOFT)
  207.         state:=0
  208.       ELSEIF (fib.entrytype=ST_LINKDIR) AND (flags AND DWF_NOHARD)
  209.         state:=0
  210.       ENDIF
  211.       IF state AND (fib.entrytype>=0)
  212.         dirwalker(fib.filename,flags,hookfunc,userdata)
  213.       ENDIF
  214.     ENDIF
  215.   ENDWHILE
  216.  
  217.   IF (IoErr()<>ERROR_NO_MORE_ENTRIES) AND (state>=0) THEN Raise("DW03")
  218.  
  219. EXCEPT DO
  220.   IF olddir<>-1 THEN CurrentDir(olddir)
  221.  
  222.   IF fib THEN FreeDosObject(DOS_FIB,fib)
  223.   IF dirlock THEN UnLock(dirlock)
  224.  
  225.   ReThrow()
  226. ENDPROC
  227.  
  228.  
  229. -> GUI definition
  230. CONST SETLIST_W=10, KSLIST_W=8, MODLIST_W=9, LIST_H=10
  231. CONST SETSTR_MAX=16, KSSTR_MAX=16, MODSTR_MAX=16
  232.  
  233. PROC gui_init(in_gh)
  234.   DEF tfile[32]:STRING, cmd[64]:STRING, verstr[256]:STRING, fh, f=FALSE
  235.   gh:=in_gh   -> SET GLOBAL gh!!
  236.  
  237.   ->makeinvstr(strGad1)
  238.   ->makeinvstr(strGad2)
  239.   ->activategad(strGad2,gh.wnd)
  240.   ->setgadgetattrs(txtGadc,[GTTX_JUSTIFICATION,GTJ_CENTER,NIL])
  241.  
  242.   StringF(tfile,'T:BKGuiTmp.\h',FindTask(NIL))
  243.   StringF(cmd,'Version >\s `WHICH BlizKick` FILE FULL',tfile)
  244.   IF SystemTagList(cmd,NIL)=0
  245.     IF (fh:=Open(tfile,OLDFILE))
  246.       IF Fgets(fh,verstr,256)
  247.         IF StrLen(verstr)>0 THEN IF verstr[StrLen(verstr)-1]=10 THEN verstr[StrLen(verstr)-1]:=0
  248.         SetStr(verstr,StrLen(verstr))
  249.         f:=TRUE
  250.       ENDIF
  251.       Close(fh)
  252.     ENDIF
  253.   ENDIF
  254.   StringF(cmd,'DELETE >NIL: \s FORCE',tfile)
  255.   SystemTagList(cmd,NIL)
  256.   IF Not(f) THEN StrCopy(verstr,'info not available')
  257.  
  258.   settxt(gh, txtGvt, 'BlizKick version')
  259.   ->settxt(gh, txtGv, '1.10 (xx.xx.97)')
  260.   settxt(gh, txtGv, verstr)
  261. ENDPROC
  262.  
  263. PROC gui()
  264.   myeasygui({gui_init},'BlizKickGUI 1.0 © 1997 Harry Sintonen',
  265.     [BEVEL,
  266.       ->[EQROWS,
  267.       [ROWS,
  268.         [COLS,
  269.           txtGadc:=[TEXT,'Set',NIL,FALSE,SETLIST_W],
  270.           [TEXT,'Kickstart',NIL,FALSE,KSLIST_W],
  271.           [TEXT,'Modules',NIL,FALSE,MODLIST_W],
  272.           [TEXT,'Switches',NIL,FALSE,0]
  273.         ],
  274.         [COLS,
  275.           [EQROWS,
  276.             listGad1:=[LISTV,{a_list1},NIL,SETLIST_W,LIST_H-4,nameList1,0,NIL,0],
  277.             txtGad1:=[TEXT,NIL,NIL,TRUE,1],
  278.             [COLS,
  279.               [SBUTTON,{b_snew},'New'],
  280.               [SBUTTON,{b_sdel},'Del']
  281.             ]
  282.           ],
  283.           [EQROWS,
  284.             listGad2:=[LISTV,{a_list2},NIL,KSLIST_W,LIST_H-2,nameList2,0,NIL,0],
  285.             txtGad2:=[TEXT,NIL,NIL,TRUE,1]
  286.           ],
  287.           listGad3:=[LISTV,{a_list3},NIL,MODLIST_W,LIST_H,nameList3,0,NIL,0],
  288.           [ROWS,
  289.             [BEVELR,
  290.               [EQROWS,
  291.                 ->[TEXT,NIL,NIL,FALSE,1],[SPACEV],
  292.                 [CHECK,{c_force},'Force',f_force,FALSE],[SPACEV],
  293.                 [CHECK,{c_localfast},'LocalFast',f_localfast,FALSE],[SPACEV],
  294.                 [CHECK,{c_quickboot},'QuickBoot',f_quickboot,FALSE],[SPACEV],
  295.                 [CHECK,{c_speedrom},'SpeedROM',f_speedrom,FALSE],[SPACEV],
  296.                 [CHECK,{c_hogwaitblit},'HogWaitBlit',f_hogwaitblit,FALSE]
  297.                 ->[SPACEV],[TEXT,NIL,NIL,FALSE,1]
  298.               ]
  299.             ],
  300.             txtGvt:=[TEXT,NIL,NIL,FALSE,1],
  301.             txtGv:=[TEXT,'BlizKick 1.10 (04/01/97)',NIL,TRUE,1]
  302.           ]
  303.         ],
  304.         [BAR],
  305.         [COLS,
  306.           [BUTTON,{b_kick},'Kick'],
  307.           [SPACEH],
  308.           [BUTTON,{b_save},'Save settings'],
  309.           [SPACEH],
  310.           [BUTTON,{b_cancel},'Cancel']
  311.         ]
  312.       ]
  313.     ]
  314.   )
  315. ENDPROC
  316.  
  317.  
  318. PROC settxt(gh:PTR TO guihandle, gadget, str, newmax=0) HANDLE
  319.   DEF gad:PTR TO gadget,slen,gslen,gadstr
  320.   IF gad:=findgadget(gh, gadget)
  321.     IF Not(gad.gadgettype AND GTYP_REQGADGET)
  322.       IF gad.userdata=NIL THEN Raise(0)
  323.       IF Long(gad.userdata)>65536 THEN Raise(0)   -> normally 16?
  324.       gadstr:=Long(gad.userdata+4)
  325.       slen:=StrLen(str)+1
  326.       IF gad.gadgettype AND GTYP_GTYPEMASK THEN Raise(0)
  327.       IF gadstr
  328.         gslen:=Max(StrLen(gadstr)+1, newmax)   ->  needs to be fixed!!
  329.       ELSE
  330.         gadstr:=New(gslen:=Max(slen,newmax))
  331.         PutLong(gad.userdata+4,gadstr)
  332.       ENDIF
  333.  
  334.       -> PrintF('gslen: \d newmax: \d\n',gslen,newmax)
  335.  
  336.       IF gslen<slen THEN slen:=gslen-1
  337.       CopyMem(str,gadstr,slen)
  338.       Gt_SetGadgetAttrsA(gad,gh.wnd,NIL,[GTTX_TEXT,gadstr,NIL])  -> gui update
  339.     ENDIF
  340.   ENDIF
  341. EXCEPT DO
  342.   ReThrow()
  343. ENDPROC
  344.  
  345. /*
  346. PROC settxt(gh:PTR TO guihandle, gadget, str)
  347.   DEF gad:PTR TO gadget
  348.   IF gad:=findgadget(gh, gadget)
  349.     IF Not(gad.gadgettype AND GTYP_REQGADGET)
  350.       Gt_SetGadgetAttrsA(gad,gh.wnd,NIL,[GTTX_TEXT,str,NIL])
  351.     ENDIF
  352.   ENDIF
  353. ENDPROC
  354.  
  355. PROC activategad(gadget,win)
  356.   DEF gad:PTR TO gadget
  357.   IF gad:=findgadget(gh, gadget)
  358.     IF Not(gad.gadgettype AND GTYP_REQGADGET)
  359.       IF Not(gad.flags AND GFLG_DISABLED)
  360.         PrintF('!!\n')
  361.         IF ActivateGadget(gad,win,NIL)=0 THEN PrintF('failed!\n')
  362.       ENDIF
  363.     ENDIF
  364.   ENDIF
  365. ENDPROC
  366.  
  367. PROC makeinvstr(gadget)
  368.   DEF gad:PTR TO gadget,sinfo:PTR TO stringinfo,ext:PTR TO stringextend
  369.  
  370.   IF gad:=findgadget(gh, gadget)
  371.     IF ((gad.gadgettype AND GTYP_GTYPEMASK)=GTYP_STRGADGET)
  372.       IF (gad.activation AND GACT_STRINGEXTEND) OR ((gad.flags) AND GFLG_STRINGEXTEND)
  373.         sinfo:=gad.specialinfo
  374.         ext:=sinfo.extension
  375.         ext.pens[0]:=0; ext.pens[1]:=0
  376.         ext.activepens[0]:=0; ext.activepens[1]:=0
  377.       ENDIF
  378.     ENDIF
  379.   ENDIF
  380. ENDPROC
  381. */
  382.  
  383. -> GUI definition
  384. PROC asksetname(oldname)
  385.   DEF s
  386.  
  387.   IF (s:=String(SETSTR_MAX))=NIL THEN Raise(ERR_NEW)
  388.   StrCopy(s,oldname,SETSTR_MAX)
  389.  
  390.   myeasygui(NIL,'Set name',
  391.     [BEVEL,
  392.       [ROWS,
  393.         [TEXT,'Name for set',NIL,FALSE,12],
  394.         [STR,1,NIL,s,SETSTR_MAX,8],
  395.         [BAR],
  396.         [COLS,
  397.           [BUTTON,1,'Ok'],
  398.           [SPACEH],
  399.           [BUTTON,0,'Cancel']
  400.         ]
  401.       ]
  402.     ]
  403.   )
  404. ENDPROC s
  405.  
  406.  
  407.  
  408. -> Change the displayed list
  409. PROC changeList(list, sel_Ptr, listGad, changefunc=0, flags=0) HANDLE
  410.   DEF realgad
  411.  
  412.   -> Deselect
  413.   ^sel_Ptr:=-1
  414.  
  415.   -> Remove list (without display glitch)
  416.   setlistvlabels(gh, listGad, -1)
  417.  
  418.   -> Change list contents
  419.   IF changefunc THEN changefunc(list)
  420.  
  421. EXCEPT DO
  422.   -> Reattach list
  423.   setlistvlabels(gh, listGad, list)
  424.  
  425.   IF (flags AND 1)
  426.     -> Set list to pos 0
  427.    IF realgad:=findgadget(gh, listGad)
  428.      Gt_SetGadgetAttrsA(realgad, gh.wnd, NIL, [GTLV_TOP, 0, NIL])
  429.    ENDIF
  430.   ENDIF
  431.   ReThrow()
  432. ENDPROC
  433.  
  434. -> Add a new mynode to the list
  435. PROC addNode(list, name, type, pri, userptr=NIL) HANDLE
  436.   DEF node=NIL:PTR TO mynode, s=NIL
  437.   NEW node
  438.   IF name
  439.     s:=StrCopy(String(StrLen(name)), name)
  440.   ENDIF
  441.   node.name:=s
  442.   node.type:=type
  443.   node.pri:=pri
  444.   node.userptr:=userptr
  445.   AddTail(list, node)
  446. EXCEPT
  447.   IF node THEN END node
  448.   IF s THEN DisposeLink(s)
  449.   Throw(ERR_NODE,type)
  450. ENDPROC
  451.  
  452. ->#define SORTDEBUG
  453. PROC addNodeSort(list:PTR TO lh, name, type, pri, userptr=NIL) HANDLE
  454.   DEF node=NIL:PTR TO mynode, s=NIL, worknode:PTR TO mynode
  455.   NEW node
  456.   IF name
  457.     s:=StrCopy(String(StrLen(name)), name)
  458.   ENDIF
  459.   node.name:=s
  460.   node.type:=type
  461.   node.pri:=pri
  462.   node.userptr:=userptr
  463.  
  464.   worknode:=list.tailpred -> Ptr to last node
  465.   #ifdef SORTDEBUG
  466.   IF worknode<>list
  467.      PrintF('>> "\s" tailpred: \h \s[20]\n',s,list.tailpred,list.tailpred.name)
  468.   ELSE
  469.      PrintF('>> "\s" tailpred: none\n',s)
  470.   ENDIF
  471.   #endif
  472.   WHILE worknode<>list
  473.     #ifdef SORTDEBUG
  474.     PrintF('\h: \s[20]\n',worknode.name,worknode.name)
  475.     #endif
  476.     EXIT Stricmp(s,worknode.name)>0
  477.     worknode:=worknode.pred
  478.   ENDWHILE
  479.   #ifdef SORTDEBUG
  480.   IF worknode<>list
  481.     PrintF('insert: \s[20] after \s[20]\n',s,worknode.name)
  482.   ELSE
  483.     PrintF('insert: as first\n')
  484.   ENDIF
  485.   #endif
  486.   Insert(list, node, IF worknode=(list+4) THEN 0 ELSE worknode)
  487.   ->Insert(list, node, worknode) ->IF worknode=(list+4) THEN 0 ELSE worknode)
  488.  
  489. EXCEPT
  490.   IF node THEN END node
  491.   IF s THEN DisposeLink(s)
  492.   Throw(ERR_NODE,type)
  493. ENDPROC
  494.  
  495. -> Free a list of mynodes and empty it
  496. PROC freeNodes(list:PTR TO lh, userfreefunc=NIL)
  497.   DEF worknode:PTR TO mynode, nextnode
  498.   worknode:=list.head  -> First node
  499.   WHILE nextnode:=worknode.succ
  500.     IF userfreefunc THEN userfreefunc(worknode.userptr)
  501.     IF worknode.name THEN DisposeLink(worknode.name)
  502.     END worknode
  503.     worknode:=nextnode
  504.   ENDWHILE
  505.   newList(list)
  506. ENDPROC
  507.  
  508.  
  509. -> GUI actions:
  510.  
  511. PROC a_list1(info, sel)
  512.   DEF node:PTR TO ln, s, m, i=0
  513.   CurrentTime({s}, {m})
  514.   node:=nameList1.head  -> First node
  515.   WHILE node.succ AND (i<sel)
  516.     node:=node.succ
  517.     INC i
  518.   ENDWHILE
  519.   settxt(gh, txtGad1, node.name, SETSTR_MAX)
  520.   IF (sel=oldSel1) AND DoubleClick(secs, micros, s, m)
  521.     Raise(ERR_OK)  -> Double click
  522.   ENDIF
  523.   secs:=s; micros:=m; oldSel1:=sel
  524. ENDPROC
  525.  
  526. PROC a_list2(info, sel)
  527.   DEF node:PTR TO ln, i=0
  528.   node:=nameList2.head  -> First node
  529.   WHILE node.succ AND (i<sel)
  530.     node:=node.succ
  531.     INC i
  532.   ENDWHILE
  533.   settxt(gh, txtGad2, node.name, KSSTR_MAX)
  534.   oldSel2:=sel
  535.  
  536. ENDPROC
  537.  
  538. PROC a_list3(info, sel)
  539.   DEF node:PTR TO ln, i=0
  540.   node:=nameList3.head  -> First node
  541.   WHILE node.succ AND (i<sel)
  542.     node:=node.succ
  543.     INC i
  544.   ENDWHILE
  545.   -> change mode
  546.   ->PrintF('Change mode.\n')
  547.   node.name[0]:=IF node.name[0]=" " THEN "·" ELSE " "
  548.  
  549.   ->list, sel_Ptr, listGad
  550.   changeList(nameList3,{sel},listGad3)
  551.  
  552.   oldSel3:=sel
  553. ENDPROC
  554.  
  555. PROC b_kick(info) IS Raise(ERR_OK)
  556.  
  557. PROC b_save(info)
  558.   settxt(gh, txtGad1, 'Save! :)', SETSTR_MAX)
  559. ENDPROC
  560.  
  561. PROC b_cancel(info) IS Raise(ERR_CANCEL)
  562.  
  563. PROC c_force(info,bool) IS f_force:=bool
  564. PROC c_localfast(info,bool) IS f_localfast:=bool
  565. PROC c_quickboot(info,bool) IS f_quickboot:=bool
  566. PROC c_speedrom(info,bool) IS f_speedrom:=bool
  567. PROC c_hogwaitblit(info,bool) IS f_hogwaitblit:=bool
  568.  
  569. PROC b_snew(info)
  570.   PrintF('Newname: \s\n',asksetname(''))
  571. ENDPROC
  572. PROC b_sdel(info)
  573.   PrintF('Set Del\n')
  574. ENDPROC
  575.  
  576.  
  577. PROC setgadgetattrs(gadget,taglist)
  578.   DEF realgad
  579.   IF realgad:=findgadget(gh, gadget)
  580.     Gt_SetGadgetAttrsA(realgad, gh.wnd, NIL, taglist)
  581.   ENDIF
  582. ENDPROC
  583.  
  584.  
  585.  
  586. -> guiinit() locks Workbench screen! :(
  587. PROC myeasygui(initcodeptr,windowtitle,gui,info=NIL,screen=NIL,textattr=NIL) HANDLE
  588.   DEF res=-1,lock=0, gh=NIL:PTR TO guihandle
  589.  
  590.   IF Not(screen)
  591.     lock:=LockPubScreen(NIL)
  592.     screen:=lock
  593.   ENDIF
  594.  
  595.   IF (gh:=guiinit(windowtitle,gui,info,screen,textattr))
  596.  
  597.     IF lock THEN UnlockPubScreen(NIL,lock)
  598.  
  599.     IF initcodeptr THEN initcodeptr(gh)
  600.  
  601.     WHILE res<0
  602.       Wait(gh.sig)
  603.       res:=guimessage(gh)
  604.     ENDWHILE
  605.   ELSE
  606.     IF lock THEN UnlockPubScreen(NIL,lock)
  607.   ENDIF
  608. EXCEPT DO
  609.   cleangui(gh)
  610.   ReThrow()
  611. ENDPROC res
  612.  
  613. /*
  614.               [TEXT,'BlizKick version',NIL,FALSE,1],
  615.               [TEXT,'1.10 (xx.xx.97)',NIL,TRUE,1]
  616. */
  617.